package cn.wolfcode.luowowo.web.listener;

import cn.wolfcode.luowowo.domain.Strategy;
import cn.wolfcode.luowowo.redis.redisService.IStrategyStatisVoService;
import cn.wolfcode.luowowo.service.IStrategyService;
import cn.wolfcode.luowowo.vo.StrategyStatisVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

import java.applet.AppletContext;
import java.util.List;

//@Component
public class RedisDataInitListener implements ApplicationListener<ContextRefreshedEvent> {

    @Autowired
    private IStrategyService strategyService;
    @Autowired
    private IStrategyStatisVoService strategyStatisVoService;

    //容器创建完成马上执行该方法(Aop Di Ioc)
    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        //1.将所有点击数 评论数 收藏数等查出来
        List<Strategy> list = strategyService.list();

        //2.构造vo对象 存到redis中
        for (Strategy strategy : list) {
           /*
            思考: 如果redis中已经存在vo 要不要初始化? 覆盖?
            回答: 如果有vo对象 必须跳过
            原因: 因为已经初始化过vo 前端进行收藏点击等操作会修改vo对象
            如果再初始化 vo会被覆盖 数据会丢失 ,因此若已存在,直接跳过
            */
           if(strategyStatisVoService.isVoExsits(strategy.getId())){
               continue;//跳过
           }

            //每遍历一个攻略构造一个vo
            StrategyStatisVO vo = new StrategyStatisVO();
            //拷贝统计数据 和 当前攻略id
            BeanUtils.copyProperties(strategy, vo);
            vo.setStrategyId(strategy.getId());

            //添加到redis中
            strategyStatisVoService.setStrategyStatisVo(vo);

        }
    }
}
